package config

import (
	"encoding/csv"
	"encoding/json"
	"gopkg.in/ini.v1"
	"io"
	"log"
	"os"
	"ping-info-go/pkg/global"
	"strings"

	// 添加编码转换所需的包
	"golang.org/x/text/encoding/simplifiedchinese"
	"golang.org/x/text/transform"
)

func DoInit() {
	csvInit()
	iniInit()
}

func iniInit() {
	// 读取INI文件内容（GBK编码）
	fileContent, err := os.ReadFile("config.ini")
	if err != nil {
		log.Fatalf("读取INI配置文件失败: %v", err)
	}

	// 转换GBK编码到UTF-8
	decoder := simplifiedchinese.GBK.NewDecoder()
	utf8Content, _, err := transform.Bytes(decoder, fileContent)
	if err != nil {
		log.Fatalf("INI配置文件编码转换失败: %v", err)
	}

	// 加载转换后的配置内容
	config, err := ini.Load(utf8Content)
	if err != nil {
		log.Fatalf("解析INI配置文件失败: %v", err)
	}

	// 读取INI配置（原有代码保持不变）
	global.PingInterval = config.Section("").Key("PingInterval").MustDuration(global.PingInterval)
	global.TimesPerInterval = config.Section("").Key("TimesPerInterval").MustInt(global.TimesPerInterval)
	global.PingTimeout = config.Section("").Key("PingTimeout").MustDuration(global.PingTimeout)

	log.Printf("加载配置文件: config.ini，内容: %s, %d, %s", global.PingInterval, global.TimesPerInterval, global.PingTimeout)
}

func csvInit() {

	// 初始化全局配置
	global.Services = make([]global.ServiceConfig, 0)

	file, err := os.Open("config.csv")
	if err != nil {
		log.Fatalf("打开CSV配置文件失败: %v", err)
	}
	defer func(file *os.File) {
		_ = file.Close()
	}(file)

	// 创建CSV读取器，增加GBK到UTF-8的编码转换
	// 解决中文乱码问题
	decoder := simplifiedchinese.GBK.NewDecoder()
	reader := csv.NewReader(transform.NewReader(file, decoder))
	reader.TrimLeadingSpace = true // 自动去除字段前后空格

	// 读取CSV数据行
	for rowIdx := 0; ; rowIdx++ {
		record, err := reader.Read()
		if err == io.EOF {
			break // 读取完毕
		}
		if err != nil {
			log.Printf("警告: 第%d行解析失败: %v，已跳过", rowIdx, err)
			continue
		}

		// 按索引或表头字段解析数据（根据实际CSV格式调整）
		if len(record) > 0 {
			global.Services = append(global.Services, global.ServiceConfig{
				Name: strings.TrimSpace(record[0]),
				Host: strings.TrimSpace(record[1]),
			})
		}
	}

	// 保留原有日志和初始化代码
	configBytes, _ := json.Marshal(global.Services)
	log.Printf("加载配置文件: config.csv，内容: %s", string(configBytes))
}
